#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Importacion de modulos
import pygtk
pygtk.require('2.0')
import gtk, gtk.glade, inspect, sys, subprocess, os, string, re, collections
import gtksourceview2 as gtkview
from Utilidades import Util
from Corrector import Revisar
#rc_parser("Estilo")

class Castellano:

    def __init__(self):
	
	#Se importa el archivo .glade
	self.w_tree = gtk.glade.XML('/usr/local/share/Lazarillo/Interfaz.glade')
	self.Castellano = self.w_tree.get_widget('Castellano')
	self.Castellano.set_icon_from_file("/usr/local/share/pixmaps/Lazarillo.png")
				
	# Widgets del menu Archivo
	self.m_Nuevo = self.w_tree.get_widget ('m_Nuevo1')
	self.m_Abrir_Texto = self.w_tree.get_widget ('m_Abrir_Texto1')
	self.m_Abrir_Traduccion = self.w_tree.get_widget ('m_Abrir_Traduccion1')
	self.m_Matematica = self.w_tree.get_widget ('m_Castellano')
	self.m_Traduccion = self.w_tree.get_widget ('m_Traduccion1')
	self.m_Guardar_C_Texto = self.w_tree.get_widget ('m_Guardar_C_Texto1')
	self.m_Guardar_C_Traduccion = self.w_tree.get_widget ('m_Guardar_C_Traduccion1')
	self.m_Cambiar_Traduccion = self.w_tree.get_widget ('m_Cambiar_Traduccion1')
	self.m_Elegir_Perfil = self.w_tree.get_widget ('m_Elegir_Perfil1')
	self.m_Imprimir = self.w_tree.get_widget ('m_Imprimir1')
	self.m_Salir = self.w_tree.get_widget ('m_Salir1')
	
	# Widgets del menu Editar
	self.m_Deshacer = self.w_tree.get_widget ('m_Deshacer1')
	self.m_Rehacer = self.w_tree.get_widget ('m_Rehacer1')
	self.m_Cortar = self.w_tree.get_widget ('m_Cortar1')
	self.m_Copiar = self.w_tree.get_widget ('m_Copiar1')
	self.m_Pegar = self.w_tree.get_widget ('m_Pegar1')
	self.m_Revisar_ortografia = self.w_tree.get_widget ('m_Revisar_ortografia')
	self.m_Seleccionar_todo = self.w_tree.get_widget ('m_Seleccionar_todo1')

	#Widgets del menú Buscar
	self.Ir_a = self.w_tree.get_widget ('m_Ir_a1')

	# Widgets del menu Traducir
	self.m_Braille_Grado_1 = self.w_tree.get_widget ('m_Braille_Grado')
	self.m_Braille_Grado_2 = self.w_tree.get_widget ('m_Braille_Grado_2')
		
	# Widgets del menu Ayuda
	self.m_Manual_Ayuda = self.w_tree.get_widget ('m_Manual_Ayuda1')
	self.m_Acerca_de = self.w_tree.get_widget ('m_Acerca_de1')
		
	# Widgets del menu de accesos directos Caja_botones
	self.Caja_botones = self.w_tree.get_widget ('Caja_botones1')
	self.Nuevo = self.w_tree.get_widget ('Nuevo1')
	label=gtk.Label("_Nuevo")
	label.set_use_underline(True)
	self.Nuevo.add(label)
	self.Abrir = self.w_tree.get_widget ('Abrir1')
	label=gtk.Label("_Abrir")
	label.set_use_underline(True)
	self.Abrir.add(label)
	self.Guardar = self.w_tree.get_widget ('Guarda1')
	label=gtk.Label("_Guardar")
	label.set_use_underline(True)
	self.Guardar.add(label)
	self.Deshacer = self.w_tree.get_widget ('Deshacer1')
	label=gtk.Label("_Deshacer")
	label.set_use_underline(True)
	self.Deshacer.add(label)
	self.Rehacer = self.w_tree.get_widget ('Rehacer1')
	label=gtk.Label("_Rehacer")
	label.set_use_underline(True)
	self.Rehacer.add(label)
	self.Cortar = self.w_tree.get_widget ('Cortar1')
	label=gtk.Label("Cor_tar")
	label.set_use_underline(True)
	self.Cortar.add(label)
	self.Copiar = self.w_tree.get_widget ('Copiar1')
	label=gtk.Label("_Copiar")
	label.set_use_underline(True)
	self.Copiar.add(label)
	self.Pegar = self.w_tree.get_widget ('Pegar1')
	label=gtk.Label("_Pegar")
	label.set_use_underline(True)
	self.Pegar.add(label)
	self.Tipografia = self.w_tree.get_widget ('Tipografia')
	#Botones insertados por Pygtk
	self.Alinear_Izquierda = gtk.Button(label=None, stock=None, use_underline=True)
	self.Alinear_Izquierda.set_relief(gtk.RELIEF_NONE)
	self.image = gtk.Image()
	self.image.set_from_file("/usr/local/share/pixmaps/Izq.png")
	self.Alinear_Izquierda.set_image(self.image)
	self.Alinear_Izquierda.add(self.image)
	self.Alinear_Centrar = gtk.Button(label=None, stock=None, use_underline=True)
	self.Alinear_Centrar.set_relief(gtk.RELIEF_NONE)
	self.image = gtk.Image()
	self.image.set_from_file("/usr/local/share/pixmaps/Centrar.png")
	self.Alinear_Centrar.set_image(self.image)
	self.Alinear_Centrar.add(self.image)
	self.Alinear_Derecha = gtk.Button(label=None, stock=None, use_underline=True)
	self.Alinear_Derecha.set_relief(gtk.RELIEF_NONE)
	self.image = gtk.Image()
	self.image.set_from_file("/usr/local/share/pixmaps/Derecha.png")
	self.Alinear_Derecha.set_image(self.image)
	self.Alinear_Derecha.add(self.image)
	self.Traducir = gtk.Button(label="T_raducir", stock=None, use_underline=True)
	#Se Fija el botón sin relieve
	self.Traducir.set_relief(gtk.RELIEF_NONE)
	#Se Fija imagen del botón
	self.image = gtk.Image()
	self.image.set_from_file("/usr/local/share/pixmaps/Lazarillo.png")
	self.Traducir.set_image(self.image)
	#Falta fijar posición de la imagen en el botón: gtk.POS_TOP
	self.Traducir.add(self.image)
	label=gtk.Label("T_raducir")
	label.set_use_underline(True)
	self.Traducir.add(label)
	self.Orca = gtk.Button(label=" Acceder a \n    _Orca", stock=None, use_underline=True)
	self.image1 = gtk.Image()
	self.image1.set_from_file("/usr/local/share/pixmaps/ORCA.png")
	self.Orca.set_image(self.image1)
	self.Orca.add(self.image1)
	self.Orca.set_relief(gtk.RELIEF_NONE)
	label=gtk.Label("Orc_a")
	label.set_use_underline(True)
	self.Orca.add(label)
	
	#Se colocan los botones en la Caja de botones dispuesta para los accesos directos
	self.Caja_botones.pack_start(self.Alinear_Izquierda,expand=False,fill=False,padding=0)
	self.Caja_botones.pack_start(self.Alinear_Centrar,expand=False,fill=False,padding=0)
	self.Caja_botones.pack_start(self.Alinear_Derecha,expand=False,fill=False,padding=0)
	self.Caja_botones.pack_start(self.Traducir,expand=False,fill=False,padding=0)
	self.Caja_botones.pack_start(self.Orca,expand=False,fill=False,padding=0)
	
        # Barras de desplazamiento
	self.Barras = self.w_tree.get_widget ('Barras1')
		
	# Area de edicion de texto
	self.buf = gtkview.Buffer()
	self.Texto1 = gtkview.View(self.buf)
	self.Texto1.set_editable(True)
	self.Texto1.set_wrap_mode(gtk.WRAP_CHAR)
	self.Barras.add(self.Texto1)
	self.display = gtk.gdk.display_manager_get().get_default_display()
	self.clipboard1 = gtk.Clipboard(self.display, "CLIPBOARD")
	
	#Para colocar el título de la traducción
	self.Titulo_Traduccion = self.w_tree.get_widget ('Titulo_Traduccion1')
	
	#Presentación de la traducción
	self.Texto_Traduccion = self.w_tree.get_widget ('Texto_Traduccion1')
	self.buffer1 = gtk.TextBuffer(table=None)
	self.Texto_Traduccion.set_buffer(self.buffer1)
	self.Barras2 = self.w_tree.get_widget ('Barras22')
	self.Barras2.add(self.Texto_Traduccion)
	
	#Ventana de error
	self.Error = self.w_tree.get_widget ('Error')
	self.Error.set_icon_from_file("/usr/local/share/pixmaps/Lazarillo.png")

	#Ventana Abrir
	self.Elegir_Abrir = self.w_tree.get_widget ('Elegir_Abrir')
	self.Elegir_Abrir.set_icon_from_file("/usr/local/share/pixmaps/Lazarillo.png")
	self.Abrir_Texto = self.w_tree.get_widget ('Abrir_Texto')
	self.Abrir_Traduccion = self.w_tree.get_widget ('Abrir_Traduccion') # Verificar antes que debe estar hecha la traducción
	self.Cancelar2 = self.w_tree.get_widget ('Cancelar2')
	self.Aceptar2 = self.w_tree.get_widget ('Aceptar2')

	# Ventana de guardado rápido
	self.Elegir_Guardar = self.w_tree.get_widget ('Elegir_Guardar1')
	self.Elegir_Guardar.set_icon_from_file("/usr/local/share/pixmaps/Lazarillo.png")
	self.Guardar_Texto = self.w_tree.get_widget ('Guardar_Texto')
	self.Guardar_Braille = self.w_tree.get_widget ('Guardar_Braille1') # Verificar antes que debe estar hecha la traducción
	self.Cancelar = self.w_tree.get_widget ('Cancelar1')
	self.Aceptar = self.w_tree.get_widget ('Aceptar1')

	#Ventana de Traducción
	self.V_Traducir = self.w_tree.get_widget ('V_Traducir')
	self.V_Traducir.set_icon_from_file("/usr/local/share/pixmaps/Lazarillo.png")
	self.Traducir_1 = self.w_tree.get_widget ('Traducir_1')
	self.Traducir_2 = self.w_tree.get_widget ('Traducir_2')
	self.Acep = self.w_tree.get_widget ('Acep')
	self.Cance = self.w_tree.get_widget ('Cance')

	#Conectando todas las señales
	self.Alinear_Izquierda.connect("clicked", self.on_Alinear_Izquierda, "1")
	self.Alinear_Centrar.connect("clicked", self.on_Alinear_Centrar, "2")
	self.Alinear_Derecha.connect("clicked", self.on_Alinear_Derecha, "3")
	self.Traducir.connect("clicked", self.on_Traducir, "4")
	self.Orca.connect("clicked", self.on_Orca, "5")

	self.w_tree.signal_autoconnect(dict(inspect.getmembers(self)))

	
    # Funcion que cierra la aplicación
    def on_Castellano_destroy(self,*args):
	gtk.main_quit()
        
    """Crea un nuevo archivo"""
    #Función Crear nuevo archivo ejecutada desde el menú
    def on_m_Nuevo1(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.Nuevo()
	
    """Desde el acceso directo"""
    #Función Crear nuevo archivo ejecutada desde el acceso directo	
    def on_Nuevo1_clicked(self,*args):
	Castellano.on_m_Nuevo1(self,*args)
	
    """Abrir archivo"""
    def on_m_Abrir_Texto1(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	self.Traduccion = False
	Instancia.m_Abrir(self.Traduccion)

    def on_m_Abrir_Traduccion1(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	self.Traduccion = True
	Instancia.m_Abrir(self.Traduccion)	

    def on_Abrir1_clicked(self,*args):
	self.Elegir_Abrir.run()
	self.Elegir_Abrir.hide()

    def on_Aceptar2_clicked(self,*args):
	res1 = self.Abrir_Texto.get_active()
	res2 = self.Abrir_Traduccion.get_active()
	
	if res1 == True:
		Castellano.on_m_Abrir_Texto1(self,*args)
	if res2 == True:
		Castellano.on_m_Abrir_Traduccion1(self,*args)

    def on_Abrir1_clicked(self,*args):
	self.Elegir_Abrir.run()
	self.Elegir_Abrir.hide()
	
    """-----------Guardar archivo------------"""
    """Funciones de la ventana Elegir_Guardar que se encuentra en el acceso directo"""   
    def on_Guarda1_clicked(self,*args):
	self.Elegir_Guardar.run()
	self.Elegir_Guardar.hide()

    def on_Aceptar1_clicked(self,*args):
	res1 = self.Guardar_Texto.get_active()
	res2 = self.Guardar_Braille.get_active()
	#Si se presionó el radio button Guardar_Texto, 
	#invoca al selector de archivo correspondiente.
	if res1 == True:
		Castellano.on_m_Castellano(self,*args)
	if res2 == True:
		Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
		Instancia.m_Traduccion()

    """Guardar por el menú"""
    def on_m_Castellano(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.m_Matematica()   

    def on_m_Traduccion1(self,*args):
	self.char_count = self.buffer1.get_char_count()
	if self.char_count!=0:
		Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
		Instancia.m_Traduccion()
	else:
		self.Error.set_title("Lazarillo - Error")
		self.Error.set_markup("No se ha realizado ninguna traducción")
		Castellano.on_Error(self,*args)	

    def on_m_Guardar_C_Texto1(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.m_Guardar_C_Texto()
	
    def on_m_Guardar_C_Traduccion1(self,*args):
	self.char_count = self.buffer1.get_char_count()
	if self.char_count!=0:
		Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
		Instancia.m_Guardar_C_Traduccion()
	else:
		self.Error.set_title("Lazarillo - Error")
		self.Error.set_markup("No se ha realizado ninguna traducción")
		Castellano.on_Error(self,*args)

    """-----------Cambiar Traducción-------------"""
    """Funciones de la ventana Cambiar_Traduccion"""
    #Ventana que permite elegir el tipo de traducción a la que se desa cambiar
    def on_m_Cambiar_Traduccion1(self,*args):
	self.bandera = True
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.on_Cambiar_Traduccion(self.bandera)

    """------------Elegir Perfil------------"""
    """Funciones de la ventana Elegir_Perfil"""
    #Ventana que permite elegir un nuevo perfil de usuario
    def on_m_Elegir_Perfil1(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.on_Elegir_Perfil()
	
    """Imprimir"""
    #Gestor para imprimir en una impresora normal
    #def on_m_Imprimir1 (self,*args):
    #	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
    #	Instancia.m_Imprimir()

    """Salir por el menú"""
    #Salir de la aplicación por el menú
    def on_m_Salir1(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.m_Salir()

    """Funciones de edición"""
    #Función deshacer ejecutada desde el menú, tomada desde gtksourceview
    def on_m_Deshacer1(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.m_Deshacer()

    #Función deshacer ejecutada desde el acceso directo, tomada desde gtksourceview
    def on_Deshacer1_clicked(self,*args):
	Castellano.on_m_Deshacer1(self,*args)
    
    #Función rehacer ejecutada desde el menú, tomada desde gtksourceview
    def on_m_Rehacer1(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.m_Rehacer()

    #Función rehacer ejecutada desde el acceso directo, tomada desde gtksourceview
    def on_Rehacer1_clicked(self,*args):
	Castellano.on_m_Rehacer1(self,*args)

    #Función Cortar ejecutada desde el menú
    def on_m_Cortar1(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.m_Cortar()

    #Función Cortar ejecutada desde el acceso directo
    def on_Cortar1_clicked(self,*args):
	Castellano.on_m_Cortar1(self,*args)

    #Función Copiar ejecutada desde el menú
    def on_m_Copiar1(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.m_Copiar()

    #Función Copiar ejecutada desde el acceso directo
    def on_Copiar1_clicked(self,*args):
	Castellano.on_m_Copiar1(self,*args)

    #Función Pegar ejecutada desde el menú
    def on_m_Pegar1(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.m_Pegar()
 
    #Función Pegar ejecutada desde el acceso directo
    def on_Pegar1_clicked(self,*args):
	Castellano.on_m_Pegar1(self,*args)
	
    #Módulo de revisión ortográfica
    #Extrae cada palabra del archivo (text sería el archivo) y convierte
    #todas las palabras en minúsculas
  
    def on_m_Revisar_ortografia(self,*args):
	self.word=""
	resultado=[]
	self.char_count = self.buf.get_char_count()
	f = open('Temporal.temp','w')
	start, end = self.buf.get_bounds()
	f.write(self.buf.get_text(start, end, True)+"\n")
	f.close()
	f = open('Temporal.temp','r')
	while True:
		self.linea = f.readline()
		if not self.linea: break
		for i in range(0,len(self.linea)):
			self.word = self.word+self.linea[i]
			if self.linea[i]== " ":
				self.word = self.word.rstrip(" ")
				#Instancia = Revisar(self.word)
				#resultado = Instancia.correct()
				self.word=""
				#del resultado
			elif  i==len(self.linea):
				Instancia = Revisar(self.word)
				resultado = Instancia.correct()
				self.word=""
				del resultado
			else:
				continue

	return True
	
	
    #Función ejecutada desde el menú, selecciona todo el contenido del archivo
    def on_m_Seleccionar_todo1(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.m_Seleccionar_todo()

    def on_m_Ir_a1(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.m_Ir_a()

    """Diálogo para selección de fuente y tamaño del texto"""
       
    def on_Tipografia_font_set(self,*args):
	self.Tipografia.set_title("Tipografía - Lazarillo")
	#Castellano.on_Tipografia(self,*args)
	Nombre_Fuente = self.Tipografia.get_font_name()

	if Nombre_Fuente.find("Braile")!=-1 or Nombre_Fuente.find("Braille")!=-1 or Nombre_Fuente.find("braile")!=-1 or Nombre_Fuente.find("braille")!=-1:
		self.Error.set_markup("Fuente no permitida")
		self.on_Error(self,*args)
	else:
		#Obtengo los iteradores del buffer
		start, end = self.buf.get_selection_bounds()
		#Creo la etiqueta asociada al buffer
		self.tag = self.buf.create_tag(None)
		#Se asigna la propiedad a la etiqueta
		self.tag.set_property("font", Nombre_Fuente)
		self.buf.apply_tag(self.tag, start, end)

    """Alinear texto"""
    def on_Alinear_Izquierda(self,*args):
	self.Texto1.set_justification(gtk.JUSTIFY_LEFT)

    def on_Alinear_Centrar(self,*args):
	self.Texto1.set_justification(gtk.JUSTIFY_CENTER)

    def on_Alinear_Derecha(self,*args):
	self.Texto1.set_justification(gtk.JUSTIFY_RIGHT)

    """------------Traducir--------------"""
    #Módulo de traducción del menú de texto castellano a Braille grado 1 y grado 2    
    def on_m_Braille_Grado(self,*args):
	self.char_count = self.buf.get_char_count()
	if self.char_count >0:
		start, end = self.buffer1.get_bounds()
		self.buffer1.delete(start,end)
		f = open('Temporal.temp','w')
		start, end = self.buf.get_bounds()
		f.write(self.buf.get_text(start, end, True)+"\n")
		f.close()
		f = open('Temporal.temp','r')
		self.contador=0
		while True:
			self.linea = f.readline()
			if not self.linea: break
			self.contador=self.contador+1
			resultado = Castellano.on_m_Revisar_ortografia(self,self.linea,self.contador)
			if resultado == False:
				break	
		f.close()
		if resultado == True:
			cont=1
			cadmay=''
			aux=''
			aux2=''
			lineas=[]
			cuenta=0
			cuenta2=0
			self.num=""
			j=0
			f = open('Temporal.temp','r')
			e = open('Temporal1.temp','w')
			while True:	
				cad = f.readline()
				if not cad: break
				tamanio = len(cad)-1
				while cuenta <= tamanio:
					
					if cad[cuenta] in string.digits:
						self.num = self.num+cad[cuenta]
						#print "num: ", self.num
						#cuenta2=cuenta
						#while cuenta2 <= tamanio: 
						#	if cad[cuenta2]==" ":
						#		self.num = cad[cuenta:cuenta2-1]
						#		print "self.num: ", self.num
						#		cuenta2=tamanio+1
						#	cuenta2=cuenta2+1
					cuenta=cuenta+1
					#break
				
				if self.num!="":
					posi = cad.find(self.num)
					if posi!=-1:
						cad=cad.replace(self.num,"#"+self.num)
				self.num=""
				for k in range(0,tamanio):
					if cad[k]=='x':
						aux = aux + "X"
						aux2 = aux2 + aux
						aux=''
					else:
						aux = aux + cad[k]
					
					if cad[k].isupper()==True and cad[k+1].islower()==True:
						aux = '_'+cad[k]
						aux2 = aux2 + aux
						aux = ''
					elif cad[k].isupper()==True and tamanio==1:
						aux = '_'+cad[k]
						aux2 = aux2 + aux
						aux = ''
					elif cad[k].isupper()==True and cad[k+1]==" " and cad[k-1]==" ":
						aux = '_'+cad[k]
						aux2 = aux2 + aux
						aux = ''
					elif cad[k].isupper()==True and cad[k+1].islower()==False:
						cadmay,espacio,resto = cad[k].partition(" ")
						if cadmay.isupper()== True and cad[k-1]== " ":
							aux = '__'+cad[k]
							aux2 = aux2 + aux
							aux=''
						elif cadmay.isupper()== True and k==0 and tamanio>1:
							aux = '__'+cad[k]
							aux2 = aux2 + aux
							aux=''					
						else:
							aux = cad[k]
							aux2 = aux2 + aux
							aux=''	
					else:
						aux2 = aux2 + aux
						aux=''
					if tamanio==cont:
						lineas.append(aux2+'\n')
						lineas.append('\n')
						aux=''
						aux2=''
						cont=1
						break
					cont=cont+1
			e.writelines(lineas)
			del lineas
			e.close()
			f.close()
			f = open('Temporal1.temp','r').readlines()
			i=0
			for i in range (len(f)):	
				self.buffer1.insert_at_cursor(f[i])
			self.Texto_Traduccion.set_buffer(self.buffer1)
			del f
			#Obtengo los iteradores del buffer
			start, end = self.buffer1.get_bounds()
			#Creo la etiqueta asociada al buffer
			self.tag = self.buffer1.create_tag(None)
			#Se asigna la propiedad a la etiqueta
			self.tag.set_property("font", "Brailefont 28")
			self.buffer1.apply_tag(self.tag, start, end)
			justificacion = self.Texto1.get_justification()
			if justificacion == gtk.JUSTIFY_RIGHT: 
				self.Texto_Traduccion.set_justification(justificacion)
			elif justificacion == gtk.JUSTIFY_CENTER: 
				self.Texto_Traduccion.set_justification(justificacion)
			elif justificacion == gtk.JUSTIFY_LEFT: 
				self.Texto_Traduccion.set_justification(justificacion)
			self.Texto_Traduccion.set_editable(False)
			self.m_Traduccion.set_sensitive(True)
			self.Guardar_Braille.set_sensitive(True)	
			os.remove('Temporal.temp')
			os.remove('Temporal1.temp')
	else:
		self.Error.set_title("Lazarillo - Error")
		self.Error.set_markup("No hay texto a traducir en este archivo")
		Castellano.on_Error(self,*args)	

    #Traducir a Braille Grado 2
    def on_m_Braille_Grado_2(self,*args):
	self.char_count = self.buf.get_char_count()
	if self.char_count >0:
		start, end = self.buffer1.get_bounds()
		self.buffer1.delete(start,end)
		f = open('Temporal.temp','w')
		start, end = self.buf.get_bounds()
		f.write(self.buf.get_text(start, end, True)+"\n")
		f.close()
		f = open('Temporal.temp','r')
		self.contador=0
		while True:
			self.linea = f.readline()
			if not self.linea: break
			self.contador=self.contador+1
			resultado = Castellano.on_m_Revisar_ortografia(self,self.linea,self.contador)
			if resultado == False:
				break
		f.close()
		if resultado == True:
			pos=0
			Pos=0
			POS=0
			tam=0
			cont=1
			cadmay=''
			aux=''
			aux2=''
			lineas=[]
			Palabras=["bien","con","de","el","fue","gran","haber","si","jamás","al","le","me","no","por","que","ser","se","te","un","vez","son","este","las","ella","más","él","según","para","siempre","ante","cada","muy","es","año","pues","los","como","sobre","del","en","pero","grado","hace","sin","entre","la","lo","sí","aquel","su","número"]
			Vocablos=["b","c","d","e","f","g","h","i","j","k","l","m","n","p","q","r","s","t","u","v","x","z","&","¬","á","é","ú","A","(","C","D","E","F","ñ","ü","I","w",";","%","?","!","=",'"',"*","'",".","-","í","ó",")","#"]
			pos1=0
			pos2=0
			cuenta=0
			exc="¡"
			inte="¿"
			j=0
			f = open('Temporal.temp','r')
			e = open('Temporal1.temp','w')
			#Los vocablos deben coincidir con la palabra exacta
			#y no formar parte de una palabra
			
			while True:
				pos=0
				Pos=0
				POS=0
				cad = f.readline()
				cad = cad.lower()
				if not cad: break
				tam_lista=len(Palabras)
				for w in range(0,tam_lista):
					tama = len(Palabras[w])
					tam = len(cad)-1
					for i in range(0,tam):
						pos = cad.find(Palabras[w])
						if pos!=-1 :
							if cad[0]==" " and pos==1:
								resto= cad[0:pos]
								cad = resto + Vocablos[w]
								resto=""
								break

							elif pos==0 and pos+tama==tam:
								cad = Vocablos[w]
								break
							
							if pos+tama <= tam:
								if pos==0 and cad[pos+tama]==" ":
									resto = cad.lstrip(Palabras[w])
									#print "Resto: ",resto
									cad = Vocablos[w] + resto
									tam = len(cad)-1
									resto=""
		
								elif cad[pos-1]==" " and cad[pos+tama]==" ":
									cad1,palabra,cad2 = cad.partition(" "+Palabras[w]+" ")
									cad = cad1 + " " + Vocablos[w]+ " " + cad2
									tam = len(cad)-1
									cad1=""
									cad2=""

								elif cad[pos-1]=='"':
									cad1,palabra,cad2 = cad.partition(Palabras[w])
									cad = cad1 + Vocablos[w] + cad2
									tam = len(cad)-1
									cad1=""
									cad2=""

								#elif cad[pos-1]== exc:
								#	cad1,palabra,cad2 = cad.partition(Palabras[w])
								#	cad = cad1 + Palabras[w] + cad2
								#	tam = len(cad)-1
								#	cad1=""
								#	cad2=""
			
								elif cad[pos+tama]==",":
									if cad[pos-1]==" ":
										cad1,palabra,cad2 = cad.partition(Palabras[w])
										cad = cad1 + Vocablos[w] + cad2
										tam = len(cad)-1
										cad1=""
										cad2=""
									elif pos==0:
										resto = cad.lstrip(Palabras[w])
										cad = Vocablos[w]+ resto
										tam = len(cad)-1
									elif pos+tama+1==tam:
										resto= cad[0:pos]
										cad = resto + Vocablos[w]+","
										resto=""
										break
		
								elif cad[pos+tama]==".":
									if cad[pos-1]==" ":
										cad1,palabra,cad2 = cad.partition(Palabras[w])
										cad = cad1 + Vocablos[w] + cad2
										tam = len(cad)-1
										cad1=""
										cad2=""
									elif pos==0:
										resto = cad.lstrip(Palabras[w])
										cad = Vocablos[w] + resto
										tam = len(cad)-1
									elif pos+tama+1==tam:
										resto= cad[0:pos]
										cad = resto + Vocablos[w]+"."
										resto=""
										break
								
								elif cad[pos+tama]==";":
									if cad[pos-1]==" ":
										cad1,palabra,cad2 = cad.partition(Palabras[w])
										cad = cad1 + Vocablos[w] + cad2
										tam = len(cad)-1
										cad1=""
										cad2=""
									elif pos==0:
										resto = cad.lstrip(Palabras[w])
										cad = Vocablos[w] + resto
										tam = len(cad)-1
									elif pos+tama+1==tam:
										resto= cad[0:pos]
										cad = resto + Vocablos[w]+";"
										resto=""
										break
									
								elif cad[pos+tama]==":":
									if cad[pos-1]==" ":
										cad1,palabra,cad2 = cad.partition(Palabras[w])
										cad = cad1 + Vocablos[w] + cad2
										tam = len(cad)-1
										cad1=""
										cad2=""
									elif pos==0:
										resto = cad.lstrip(Palabras[w])
										cad = Vocablos[w] + resto
										tam = len(cad)-1
									elif pos+tama+1==tam:
										resto= cad[0:pos]
										cad = resto + Vocablos[w]+":"
										resto=""
										break
			
								elif cad[pos+tama]=="?":
									if cad[pos-1]==" ":
										cad1,palabra,cad2 = cad.partition(Palabras[w])
										cad = cad1 + Vocablos[w]+ cad2
										tam = len(cad)-1
										cad1=""
										cad2=""
									elif pos==0:
										resto = cad.lstrip(Palabras[w])
										cad = Vocablos[w] + resto
										tam = len(cad)-1
									elif pos+tama+1==tam:
										resto= cad[0:pos]
										cad = resto + Vocablos[w]+"?"
										resto=""
										break
		
								elif cad[pos+tama]=="!":
									if cad[pos-1]==" ":
										cad1,palabra,cad2 = cad.partition(Palabras[w])
										cad = cad1 + Vocablos[w] + cad2
										tam = len(cad)-1
										cad1=""
										cad2=""
									elif pos==0:
										resto = cad.lstrip(Palabras[w])
										cad = Vocablos[w] + resto
										tam = len(cad)-1
									elif pos+tama+1==tam:
										resto= cad[0:pos]
										cad = resto + Vocablos[w]+"!"
										resto=""
										break
	
								elif cad[pos+tama]=='"':
									if cad[pos-1]==" ":
										cad1,palabra,cad2 = cad.partition(Palabras[w])
										cad = cad1 + Vocablos[w] + cad2
										tam = len(cad)-1
										cad1=""
										cad2=""
									elif pos==0:
										resto = cad.lstrip(Palabras[w])
										cad = Vocablos[w] + resto
										tam = len(cad)-1
									elif pos+tama+1==tam:
										resto= cad[0:pos]
										cad = resto + Vocablos[w]+'"'
										resto=""
										break
	
							if pos>1:
								if cad[pos-1]==" " and pos+tama==tam:
									resto= cad[0:pos]
									cad = resto + Vocablos[w]
									resto=""
									break

							
						else:
							continue
						pos=0
						Pos=0
						POS=0
				
					#break
				if cad.find("$")!=-1:
					cad=cad.replace("$","ls")
	
				if cad.find("€")!=-1:
					cad=cad.replace("€","le")
	
				if cad.find("[")!=-1:
					cad=cad.replace("[","á")
		
				if cad.find("]")!=-1:
					cad=cad.replace("]","ú")
		
				if cad.find("{")!=-1:
					cad=cad.replace("{","@l")
		
				if cad.find("}")!=-1:
					cad=cad.replace("}","l,")

					
 				tamanio = len(cad)#ojo
				for k in range(0,tamanio):	
					if cad[k]=='x':
						aux = aux + "X"
						aux2 = aux2 + aux
						aux=''
					else:
						aux = aux + cad[k]
					if cad[k].isupper()==True and cad[k+1].islower()==True:
						aux = '_'+cad[k]
						aux2 = aux2 + aux
						aux = ''
					elif cad[k].isupper()==True and tamanio==1:
						aux = '_'+cad[k]
						aux2 = aux2 + aux
						aux = ''
					elif cad[k].isupper()==True and cad[k+1]==" " and cad[k-1]==" ":	
						aux = '_'+cad[k]
						aux2 = aux2 + aux
						aux = ''
					elif cad[k].isupper()==True and cad[k+1].islower()==False:
						cadmay,espacio,resto = cad[k].partition(" ")
						if cadmay.isupper()== True and cad[k-1]== " ":
							aux = '__'+cad[k]
							aux2 = aux2 + aux
							aux=''
						elif cadmay.isupper()== True and k==0 and tamanio>1:
							aux = '__'+cad[k]
							aux2 = aux2 + aux
							aux=''					
						else:
							aux = cad[k]
							aux2 = aux2 + aux
							aux=''
					else:
						aux2 = aux2 + aux
						aux=''
					if tamanio==cont:
						lineas.append(aux2+'\n')
						lineas.append('\n')
						aux=''
						aux2=''
						cont=1
						break
					cont=cont+1
			e.writelines(lineas)
			del lineas
			e.close()
			f.close()
			f = open('Temporal1.temp','r').readlines()
			i=0
			for i in range (len(f)):	
				self.buffer1.insert_at_cursor(f[i])
				self.Texto_Traduccion.set_buffer(self.buffer1)
			del f
			#Obtengo los iteradores del buffer
			start, end = self.buffer1.get_bounds()
			#Creo la etiqueta asociada al buffer
			self.tag = self.buffer1.create_tag(None)
			#Se asigna la propiedad a la etiqueta
			self.tag.set_property("font", "Brailefont 28")
			self.buffer1.apply_tag(self.tag, start, end)
			justificacion = self.Texto1.get_justification()
			if justificacion == gtk.JUSTIFY_RIGHT: 
				self.Texto_Traduccion.set_justification(justificacion)
			elif justificacion == gtk.JUSTIFY_CENTER: 
				self.Texto_Traduccion.set_justification(justificacion)
			elif justificacion == gtk.JUSTIFY_LEFT: 
				self.Texto_Traduccion.set_justification(justificacion)
			self.Texto_Traduccion.set_editable(False)
			self.m_Traduccion.set_sensitive(True)
			self.Guardar_Braille.set_sensitive(True)	
			os.remove('Temporal.temp')
			#os.remove('Temporal1.temp')	
	else:
		self.Error.set_title("Lazarillo - Error")
		self.Error.set_markup("No hay texto a traducir en este archivo")
		Castellano.on_Error(self,*args)

    #Ventana para elegir la traducción
    def on_V_Traducir(self,*args):
	
	self.V_Traducir.run()
	self.V_Traducir.hide()
    
    #Permite realizar la traducción desde el acceso directo
    def on_Traducir(self,*args):
	self.char_count = self.buf.get_char_count()
	if self.char_count >0:
    		Castellano.on_V_Traducir(self,*args)
	else:
		self.Error.set_title("Lazarillo - Error")
		self.Error.set_markup("No hay texto a traducir en este archivo")
		Castellano.on_Error(self,*args)

    #Dependiendo de la opción escogida en la ventana Traducir, se ejecutará ése tipo de traducción
    def on_Acep_clicked(self,*args):
	res1 = self.Traducir_1.get_active()
	res2 = self.Traducir_2.get_active()
	if res1 == True:
		Castellano.on_m_Braille_Grado(self,*args)
	if res2 == True:
		Castellano.on_m_Braille_Grado_2(self,*args)
		
    """Ayuda"""
    #Muestra el Manual de Ayuda del sistema
    def on_m_Manual_Ayuda1(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.m_Manual_Ayuda()

    #Muestra informarción sobre el sistema
    def on_m_Acerca_de1(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.m_Acerca_de()

    """Área de Accesibilidad"""
    #Permite activar o desactivar desde la aplicación las funcionalidades brindadas por ORCA: Lector de pantalla y magnificador
    def on_Matar_Orca(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.Matar_Orca()

    def on_Orca(self,*args):
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.Orca()

    def on_Magnificador(self,*args):
	Castellano.on_Matar_Orca(self)
	Instancia = Util(self.buf,self.buffer1,self.clipboard1,self.Castellano,self.Texto1,self.Texto_Traduccion,self.Titulo_Traduccion)
	Instancia.Magnificador()

    """Funciones de la ventana de Error"""
    #Ventana genérica para anunciar un error al usuario
    def on_Error(self, *args):
	self.Error.run()
	self.Error.hide()

    """Mostrar Traductor"""
    #Se carga la aplicación
    def main(self,*args):
	self.Castellano.set_title("Sin nombre - Lazarillo")
	self.m_Imprimir.set_sensitive(False)
	self.Castellano.show()
	self.image.show()
	self.Alinear_Izquierda.show()
	self.Alinear_Centrar.show()
	self.Alinear_Derecha.show()
	self.Traducir.show()
	self.image1.show()
	self.Orca.show()
	#Textview usado para gtksourceview
	self.Texto1.show()
	gtk.main()

"""Ejecutar Traductor"""
if __name__=="__main__":
    try:
	app = Castellano()
    	app.main()
    except KeyboardInterrupt:
		pass

